package com.venutech.gongan.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.ruoyi.project.system.domain.SysUser;
import com.venutech.gongan.dto.rpc.common.dataimport.EquipAddressExportDto;
import com.venutech.gongan.dto.rpc.common.dataimport.EquipAddressExportDto02Axes;
import com.venutech.gongan.dto.rpc.common.dataimport.EquipImportDto;
import com.venutech.gongan.entity.Qdsxj;
import com.venutech.gongan.entity.TempUser;
import com.venutech.gongan.model.ResultFormat;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface QdsxjService {
    //插入数据
    ResultFormat insert(Qdsxj qdsxj);

    //根据ID删除对象
    int deleteById(Integer sb_id);

    //根据ID返回对象
    Qdsxj getById(Integer sb_id);

    //修改对象信息
    int updateQdsxj(Qdsxj qdsxj);

    //分页查询
    public Page<Qdsxj> getInfo(Integer pageNo, Integer pageSize, String begintime, String endtime,
                               String badw, String sb_name,String sb_type,String sb_state, SysUser user);

    //根据杆件经纬度查询附近设备列表
    List<Qdsxj> getEquipmentList(Double gw_jd, Double gw_w,Double radius);

    List<Qdsxj> getEquipmentListForMonitorType(Double gw_jd, Double gw_w,Double radius);

    //API
    //根据sb_bm返回对象
    Qdsxj getBySbBm(String sb_bm);

    //获取设备状态
    String getEquipmentState(Integer equipmentId);

    int getSbCount();

    int getBoundSbCount();

    /**
     * 获取绑定表里面所有绑定的sb_id和设备sb_id
     * @return
     */
    List<Qdsxj> getCameraInEquipmenteList(Map<String,Object> map);

    List<Qdsxj> getCameraInEquipmenteListForMonitorType(Map<String,Object> map);

    void batchImport(List<EquipImportDto> equipImportList);

    /**
     * 增补导入监控设备数据
     * @param equipImportList
     */
    void batchSupplyImport(List<EquipImportDto> equipImportList);

    void batchUpdateMonitorType(List<EquipImportDto> equipImportList);

    List<Qdsxj> getAll();

    /**
     * 保存设备的原始经纬度到新的字段[correct_longitude,correct_latitude]
     * @param sbId
     * @param correctLongitude
     * @param correctLatitude
     * @return
     */
    int updateCorrectLongitudeAndLatitude(int sbId, double correctLongitude, double correctLatitude);

    int updateAccurateAddress(int sbId, String accurateAddress, String accurateTownCode, String accurateTownName);

    List<Qdsxj> getQdsxjList();

    /**
     * @Author liuzhengli
     * @Description //TODO 根据指定的半径来获取当前所有设备
     * @Date  2021/8/10 0010 10:41
     * @Param * @param null:
     * @return
     */
    List<Qdsxj> getQdsxjListBylatandlog(Double gw_jd, Double gw_wd, Double radius);

    List<String> getSubAreaCodeList(String areaCode);

//    List<EquipAddressExportDto> getEquipmentListBySubAreaCode(String subAreaCode, String subAreaName);

    List<String> getTownCodeList(String areaCode);

    List<EquipAddressExportDto> getEquipmentListByTownCode(String townCode);

    List<EquipAddressExportDto02Axes> getEquipmentListByTownCode2(String townCode);

    List<EquipAddressExportDto> getEquipmentListByMonitorTypeAndUserType(int monitorType, TempUser tempUser);

    /**
     * 纠正设备经纬度
     * @param equipBindWorkId
     * @param longitude
     * @param latitude
     *
     * @return
     */
    void correctPosition(int equipBindWorkId, int poleId, double longitude, double latitude, List<Integer> equipIds) ;

    /**
     * 获取当天前端设备
     * @param
     * @return
     */
    List<Qdsxj>  getQeviceAll(String dateString);

    /**
     * 根据日期来获取前端设备
     * @param startTime
     * @param endTime
     * @return
     */
    List<Qdsxj> getQeviceDayByStartTimeAndEndTime(String startTime, String endTime);

    void updateDeviceIdAndDomainId(Integer sb_id, String deviceId, String domainId);

    Qdsxj getDeviceIdByGbid(String gbid);

    List<Qdsxj> getQeviceByDay(String starttime,String sb_name);

    /**
     * 根据日期来获取前端设备 根据gbid获取识别device_id和domain_id
     * @param gbid
     * @param deviceId
     *  @param domainId
     * @return
     */
    int updateDeviceAndDomain(String gbid, String deviceId, String domainId);

    List<Qdsxj> getQdsxjBySbNameAndTypeList(String sb_name, String sb_type, String sb_ywdw);


    int updatedeviclanlog(Integer sb_id, Double correct_latitude, Double correct_longitude);

    /**
     *设备在线率
     * @return
     */
    int getOnlineRate();

    /**
     *
     * @param dev_code
     * @return
     */
    Qdsxj getTaskByDev_code(@Param("dev_code") String dev_code);

    // 计算设备在线率
    String caculateOnlinePercent();

    double getPerfactRate();

    List<Qdsxj> getQdsxYwdw();

    List<Qdsxj> getListByGwId(Integer gw_id);


}